package StructuralPattern.Bridge.Bridge;

/**
 * @Classname : BridgeClient
 * @Description : 测试 桥接模式
 * 行为型-桥接模式
 * 一、模式定义
 *   Decouple an abstraction from its implementation so that the two can vary independently.
 *   将抽象和实现解耦，使得两者可以独立地变化。
 * 二、模式类图
 *   https://kdocs.cn/l/cnZfSHgOk7Zh
 * 三、适用场景
 *   1、当存在多个维度的变化，在设计时出现了多层继承时，可考虑使用桥接模式。
 * 四、应用举例
 *   1、JDBC驱动程序
 *
 * @Author : chentianyu
 * @Date 2023/2/17 22:28
 */


public class BridgeClient {
    public static void main(String[] args) {

        new AliPay().pay();
        new WeChatPay().pay();
        new UnionPay().pay();
        System.out.println("--------------------------------------------------------------------");

        new FacePay(new AliPay()).pay();
        new FacePay(new WeChatPay()).pay();
        new FacePay(new UnionPay()).pay();
        System.out.println("--------------------------------------------------------------------");

        new FingerPrintPay(new AliPay()).pay();
        new FingerPrintPay(new WeChatPay()).pay();
        new FingerPrintPay(new UnionPay()).pay();
        System.out.println("--------------------------------------------------------------------");

        new PasswordPay(new AliPay()).pay();
        new PasswordPay(new WeChatPay()).pay();
        new PasswordPay(new UnionPay()).pay();
        System.out.println("--------------------------------------------------------------------");
    }
}

/** 20230217
 * 支付宝付款 100 元
 * 微信付款 100 元
 * 云闪付付款 100 元
 * --------------------------------------------------------------------
 * 人脸验证中。。。
 * 支付宝付款 100 元
 * 人脸验证中。。。
 * 微信付款 100 元
 * 人脸验证中。。。
 * 云闪付付款 100 元
 * --------------------------------------------------------------------
 * 指纹验证中。。。
 * 支付宝付款 100 元
 * 指纹验证中。。。
 * 微信付款 100 元
 * 指纹验证中。。。
 * 云闪付付款 100 元
 * --------------------------------------------------------------------
 * 密码验证中。。。
 * 支付宝付款 100 元
 * 密码验证中。。。
 * 微信付款 100 元
 * 密码验证中。。。
 * 云闪付付款 100 元
 * --------------------------------------------------------------------
 */
